package fiscal.gui.moldeProduto;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

import load.properties.Mensagem;
import exceptions.PersistenceExceptionMessage;
import fiscal.action.ClassificacaoActionsManager;
import fiscal.action.MoldeProdutoActionManager;
import fiscal.entities.tables.Classificacao;
import fiscal.entities.tables.MoldeProduto;
import fiscal.gui.classificacao.ClassificacaoPesquisa;

@SuppressWarnings("serial")
public class MoldeProdutoMain extends JDialog {

	private final JPanel contentPanel = new JPanel();
	private JPanel panel;
	private JToolBar toolBar;
	private JSeparator separator;
	private JButton btnNovo;
	private JButton btnAlterar;
	private JButton btnExcluir;
	private JButton btnSair;
	private JPanel panelCentro;
	private JTextField textDescricao;
	private JButton btnPesquisa;
	private JLabel lblDescrioDoModelo;
	private JPanel panel_2;
	private JScrollPane scrollPane;
	private JPanel panel_3;
	private JCheckBox checkBoxVendaFracionada;
	private JCheckBox checkBoxProdutoImportado;
	private JCheckBox checkBoxSimilaridadeBloqueada;
	private JCheckBox checkBoxProdutoCotacao;
	private MoldeProdutoActionManager action;
	private ClassificacaoActionsManager actionClassificacao;
	private JTable table;
	private JTextField textClassificacao;
	private JLabel lblClassificao;
	private JButton btnPesquisaClassificacao;
	private String strClassificacao;

	private Classificacao classificacao;
	private JButton btnDuplicar;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			new MoldeProdutoMain().setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the dialog.
	 */
	public MoldeProdutoMain() {
		setTitle("Manuten\u00E7\u00E3o de Modelos");
		try {
			setBounds(100, 100, 570, 700);
			setResizable(false);
			setModal(true);
			setLocationRelativeTo(null);
			getContentPane().setLayout(null);
			contentPanel.setBounds(0, 0, 564, 668);
			contentPanel.setMaximumSize(new Dimension(10, 10));
			contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
			getContentPane().add(contentPanel);
			contentPanel.setLayout(null);
			contentPanel.add(getPanelCentro());
			contentPanel.add(getPanel());
			contentPanel.add(getSeparator());
			setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			getTable().getParent().setBackground(Color.WHITE);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	private JPanel getPanel() {
		if (panel == null) {
			panel = new JPanel();
			panel.setBounds(5, 5, 554, 75);
			panel.setMinimumSize(new Dimension(670, 75));
			panel.setMaximumSize(new Dimension(670, 75));
			panel.setPreferredSize(new Dimension(670, 75));
			panel.setLayout(null);
			panel.add(getToolBar());
		}
		return panel;
	}
	private JToolBar getToolBar() {
		if (toolBar == null) {
			toolBar = new JToolBar();
			toolBar.setBounds(0, 0, 551, 69);
			toolBar.setMaximumSize(new Dimension(570, 70));
			toolBar.setPreferredSize(new Dimension(570, 70));
			toolBar.setMinimumSize(new Dimension(570, 70));
			toolBar.add(getBtnNovo());
			toolBar.add(getBtnDuplicar());
			toolBar.add(getBtnAlterar());
			toolBar.add(getBtnExcluir());
			toolBar.add(getBtnSair());
		}
		return toolBar;
	}
	private JSeparator getSeparator() {
		if (separator == null) {
			separator = new JSeparator();
			separator.setBounds(29, 86, 506, 2);
		}
		return separator;
	}
	private JButton getBtnNovo() {
		if (btnNovo == null) {
			btnNovo = new JButton("Novo");
			btnNovo.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					MoldeProdutoCadastro mpc = new MoldeProdutoCadastro();
					mpc.setVisible(true);
					if (mpc.isAddElement() && getTable().getModel().getRowCount() > 0) {
						refreshTable();
					}
				}
			});
			btnNovo.setPreferredSize(new Dimension(60, 60));
			btnNovo.setMinimumSize(new Dimension(60, 60));
			btnNovo.setMaximumSize(new Dimension(60, 60));
			btnNovo.setHorizontalTextPosition(SwingConstants.CENTER);
			btnNovo.setVerticalTextPosition(SwingConstants.BOTTOM);
			btnNovo.setIcon(new ImageIcon(MoldeProdutoMain.class.getResource("/user/interfaces/icones/New file.png")));
		}
		return btnNovo;
	}
	private JButton getBtnAlterar() {
		if (btnAlterar == null) {
			btnAlterar = new JButton("Alterar");
			btnAlterar.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					alteraMoldeProduto();
				}
			});
			btnAlterar.setIcon(new ImageIcon(MoldeProdutoMain.class.getResource("/user/interfaces/icones/Edit page.png")));
			btnAlterar.setVerticalTextPosition(SwingConstants.BOTTOM);
			btnAlterar.setPreferredSize(new Dimension(60, 60));
			btnAlterar.setMinimumSize(new Dimension(60, 60));
			btnAlterar.setMaximumSize(new Dimension(60, 60));
			btnAlterar.setHorizontalTextPosition(SwingConstants.CENTER);
		}
		return btnAlterar;
	}
	protected void alteraMoldeProduto() {
		MoldeProduto mp = selectObject();
		if (mp != null) {
			MoldeProdutoCadastro mpc = new MoldeProdutoCadastro(mp);
			mpc.setVisible(true);
			if (mpc.isAddElement() && getTable().getModel().getRowCount() > 0) {
				refreshTable();
			}
		}
	}

	private MoldeProduto selectObject() {
		int linha = getTable().getSelectedRow();
		if (linha > -1) {
			return (MoldeProduto) getTable().getModel().getValueAt(linha, 2);
		}
		return null;
	}

	private JButton getBtnExcluir() {
		if (btnExcluir == null) {
			btnExcluir = new JButton("Excluir");
			btnExcluir.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					MoldeProduto mp = selectObject();
					if (mp != null) {
						try {
							int linha = getTable().getSelectedRow();
							mp.remove();
							if (getTable().getModel().getRowCount() > 0) {
								refreshTable();
								if (linha > 0){
									getTable().setRowSelectionInterval(linha-1, linha-1);
								}
							}
						} catch (PersistenceExceptionMessage e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
					}
				}
			});
			btnExcluir.setIcon(new ImageIcon(MoldeProdutoMain.class.getResource("/user/interfaces/icones/Delete.png")));
			btnExcluir.setVerticalTextPosition(SwingConstants.BOTTOM);
			btnExcluir.setPreferredSize(new Dimension(60, 60));
			btnExcluir.setMinimumSize(new Dimension(60, 60));
			btnExcluir.setMaximumSize(new Dimension(60, 60));
			btnExcluir.setHorizontalTextPosition(SwingConstants.CENTER);
		}
		return btnExcluir;
	}
	private JButton getBtnSair() {
		if (btnSair == null) {
			btnSair = new JButton("Sair");
			btnSair.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					dispose();
				}
			});
			btnSair.setIcon(new ImageIcon(MoldeProdutoMain.class.getResource("/user/interfaces/icones/Exit.png")));
			btnSair.setVerticalTextPosition(SwingConstants.BOTTOM);
			btnSair.setPreferredSize(new Dimension(60, 60));
			btnSair.setMinimumSize(new Dimension(60, 60));
			btnSair.setMaximumSize(new Dimension(60, 60));
			btnSair.setHorizontalTextPosition(SwingConstants.CENTER);
		}
		return btnSair;
	}
	private JPanel getPanelCentro() {
		if (panelCentro == null) {
			panelCentro = new JPanel();
			panelCentro.setBounds(5, 94, 554, 568);
			panelCentro.setLayout(null);
			panelCentro.add(getTextDescricao());
			panelCentro.add(getBtnPesquisa());
			panelCentro.add(getTextClassificacao());
			panelCentro.add(getBtnPesquisaClassificacao());
			panelCentro.add(getLblClassificao());
			panelCentro.add(getLblDescrioDoModelo());
			panelCentro.add(getPanel_3());
			panelCentro.add(getPanel_2());
		}
		return panelCentro;
	}
	private JTextField getTextDescricao() {
		if (textDescricao == null) {
			textDescricao = new JTextField();
			textDescricao.setBounds(19, 20, 421, 22);
			textDescricao.addKeyListener(new KeyAdapter() {
				@Override
				public void keyPressed(KeyEvent e) {
					if (e.getKeyChar() == KeyEvent.VK_ENTER || e.getKeyCode() == 40)
						getBtnPesquisa().requestFocus();
				}
			});
			textDescricao.setColumns(10);
		}
		return textDescricao;
	}
	private JButton getBtnPesquisa() {
		if (btnPesquisa == null) {
			btnPesquisa = new JButton("Pesquisar");
			btnPesquisa.setBounds(446, 20, 79, 23);
			btnPesquisa.addKeyListener(new KeyAdapter() {
				@Override
				public void keyPressed(KeyEvent e) {
					if (e.getKeyChar() == KeyEvent.VK_ENTER || e.getKeyCode() == 40)
						getTextClassificacao().requestFocus();
					if (e.getKeyCode() == 38)
						getTextDescricao().requestFocus();
				}
			});
			btnPesquisa.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					refreshTable();
				}
			});
			btnPesquisa.setMnemonic('p');
		}
		return btnPesquisa;
	}
	protected void refreshTable() {
		
		int cont = getTable().getRowCount() - 1;
		while(cont >= 0) {
			((DefaultTableModel) getTable().getModel()).removeRow(cont);
			cont--;
		}

		ArrayList<MoldeProduto> mps;
		try {
			if (temParametro() && getClassificacao() != null) {
				mps = getAction().findByDescricaoAndParametrosAndClassificacao(getTextDescricao().getText().trim(), 
						getCheckBoxVendaFracionada().isSelected(), getCheckBoxProdutoImportado().isSelected(), 
						getCheckBoxProdutoCotacao().isSelected(), getCheckBoxSimilaridadeBloqueada().isSelected(), getClassificacao());
			} else {
				if (temParametro()) {
					mps = getAction().findByDescricaoAndParametros(getTextDescricao().getText().trim(), 
							getCheckBoxVendaFracionada().isSelected(), getCheckBoxProdutoImportado().isSelected(), 
							getCheckBoxProdutoCotacao().isSelected(), getCheckBoxSimilaridadeBloqueada().isSelected());
				} else {
					if (getClassificacao() != null)
						mps = getAction().findByDescricaoLikeAndClassificacao(getTextDescricao().getText().trim(), getClassificacao());
					else
						mps = getAction().findByDescricaoLike(getTextDescricao().getText().trim());
				}
			}
			
			for (MoldeProduto mp : mps) {
				Object objs[] = {mp.getId(), mp.getClassificacao(), mp};
				((DefaultTableModel) getTable().getModel()).addRow(objs);
			}
		} catch (PersistenceExceptionMessage e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}

	private boolean temParametro() {
		if (getCheckBoxSimilaridadeBloqueada().isSelected())
			return true;
		if (getCheckBoxProdutoCotacao().isSelected())
			return true;
		if (getCheckBoxVendaFracionada().isSelected())
			return true;
		if (getCheckBoxProdutoImportado().isSelected())
			return true;
		return false;
	}
	private JLabel getLblDescrioDoModelo() {
		if (lblDescrioDoModelo == null) {
			lblDescrioDoModelo = new JLabel("Descri\u00E7\u00E3o do Modelo");
			lblDescrioDoModelo.setBounds(19, 0, 98, 14);
		}
		return lblDescrioDoModelo;
	}
	private JPanel getPanel_2() {
		if (panel_2 == null) {
			panel_2 = new JPanel();
			panel_2.setBounds(14, 189, 526, 368);
			panel_2.setBorder(new TitledBorder(null, "Resultado da Pesquisar", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			panel_2.setLayout(null);
			panel_2.add(getScrollPane());
		}
		return panel_2;
	}
	private JScrollPane getScrollPane() {
		if (scrollPane == null) {
			scrollPane = new JScrollPane();
			scrollPane.setBounds(8, 16, 508, 344);
			scrollPane.setViewportView(getTable());
		}
		return scrollPane;
	}
	private JPanel getPanel_3() {
		if (panel_3 == null) {
			panel_3 = new JPanel();
			panel_3.setBounds(14, 106, 526, 77);
			panel_3.setBorder(new TitledBorder(null, "Parametros", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			panel_3.setLayout(null);
			panel_3.add(getCheckBoxVendaFracionada());
			panel_3.add(getCheckBoxProdutoImportado());
			panel_3.add(getCheckBoxProdutoCotacao());
			panel_3.add(getCheckBoxSimilaridadeBloqueada());
		}
		return panel_3;
	}
	private JCheckBox getCheckBoxVendaFracionada() {
		if (checkBoxVendaFracionada == null) {
			checkBoxVendaFracionada = new JCheckBox("Venda Fracionada");
			checkBoxVendaFracionada.setBounds(29, 16, 111, 23);
			checkBoxVendaFracionada.addKeyListener(new KeyAdapter() {
				@Override
				public void keyPressed(KeyEvent e) {
					if (e.getKeyChar() == KeyEvent.VK_ENTER || e.getKeyCode() == 40)
						getCheckBoxProdutoCotacao().requestFocus();
					if (e.getKeyCode() == 38)
						getBtnPesquisaClassificacao().requestFocus();
				}
			});
			checkBoxVendaFracionada.setMnemonic('e');
		}
		return checkBoxVendaFracionada;
	}
	private JCheckBox getCheckBoxProdutoImportado() {
		if (checkBoxProdutoImportado == null) {
			checkBoxProdutoImportado = new JCheckBox("Produto Importado");
			checkBoxProdutoImportado.setBounds(29, 39, 117, 23);
			checkBoxProdutoImportado.addKeyListener(new KeyAdapter() {
				@Override
				public void keyPressed(KeyEvent e) {
					if (e.getKeyChar() == KeyEvent.VK_ENTER || e.getKeyCode() == 40)
						getCheckBoxSimilaridadeBloqueada().requestFocus();
					if (e.getKeyCode() == 38)
						getCheckBoxProdutoCotacao().requestFocus();
				}
			});
			checkBoxProdutoImportado.setMnemonic('i');
		}
		return checkBoxProdutoImportado;
	}
	private JCheckBox getCheckBoxSimilaridadeBloqueada() {
		if (checkBoxSimilaridadeBloqueada == null) {
			checkBoxSimilaridadeBloqueada = new JCheckBox("Similaridade Bloqueada");
			checkBoxSimilaridadeBloqueada.setBounds(238, 39, 135, 23);
			checkBoxSimilaridadeBloqueada.addKeyListener(new KeyAdapter() {
				@Override
				public void keyPressed(KeyEvent e) {
					if (e.getKeyChar() == KeyEvent.VK_ENTER || e.getKeyCode() == 40)
						getTable().requestFocus();
					if (e.getKeyCode() == 38)
						getCheckBoxProdutoImportado().requestFocus();
				}
			});
			checkBoxSimilaridadeBloqueada.setMnemonic('m');
		}
		return checkBoxSimilaridadeBloqueada;
	}
	private JCheckBox getCheckBoxProdutoCotacao() {
		if (checkBoxProdutoCotacao == null) {
			checkBoxProdutoCotacao = new JCheckBox("Produto de Cota\u00E7\u00E3o");
			checkBoxProdutoCotacao.setBounds(238, 16, 121, 23);
			checkBoxProdutoCotacao.addKeyListener(new KeyAdapter() {
				@Override
				public void keyPressed(KeyEvent e) {
					if (e.getKeyChar() == KeyEvent.VK_ENTER || e.getKeyCode() == 40)
						getCheckBoxProdutoImportado().requestFocus();
					if (e.getKeyCode() == 38)
						getCheckBoxVendaFracionada().requestFocus();
				}
			});
			checkBoxProdutoCotacao.setMnemonic('c');
		}
		return checkBoxProdutoCotacao;
	}

	public MoldeProdutoActionManager getAction() {
		if (action == null) {
			action = new MoldeProdutoActionManager();
		}
		return action;
	}

	public void setAction(MoldeProdutoActionManager action) {
		this.action = action;
	}
	private JTable getTable() {
		if (table == null) {
			table = new JTable();
			table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			table.addKeyListener(new KeyAdapter() {
				@Override
				public void keyReleased(KeyEvent e) {
					if (e.getKeyChar() == KeyEvent.VK_ENTER){
						alteraMoldeProduto();
					}
				}
				@Override
				public void keyPressed(KeyEvent arg0) {
					if (arg0.getKeyCode() == 39)
						getTextDescricao().requestFocus();
					if (arg0.getKeyCode() == 37)
						getCheckBoxSimilaridadeBloqueada().requestFocus();
					
				}
			});
			table.addMouseListener(new MouseAdapter() {
				@Override
				public void mouseClicked(MouseEvent e) {
					if (e.getClickCount() == 2) {
						alteraMoldeProduto();
					}
				}
			});
			table.setModel(new DefaultTableModel(
				new Object[][] {
				},
				new String[] {
					"C\u00F3digo", "Classifica\u00E7\u00E3o", "Descri\u00E7\u00E3o"
				}
			) {
				boolean[] columnEditables = new boolean[] {
					false, false, false
				};
				public boolean isCellEditable(int row, int column) {
					return columnEditables[column];
				}
			});
			table.getColumnModel().getColumn(0).setPreferredWidth(54);
			table.getColumnModel().getColumn(1).setPreferredWidth(84);
			table.getColumnModel().getColumn(0).setCellRenderer(new DefaultTableCellRenderer() {
				@Override
				public Component getTableCellRendererComponent(JTable arg0,
						Object arg1, boolean arg2, boolean arg3, int arg4,
						int arg5) {
					setHorizontalAlignment(SwingConstants.RIGHT);
					return super.getTableCellRendererComponent(arg0, arg1, arg2, arg3, arg4, arg5);
				}
			});
			table.getColumnModel().getColumn(1).setCellRenderer(new DefaultTableCellRenderer() {
				@Override
				public Component getTableCellRendererComponent(JTable arg0,
						Object arg1, boolean arg2, boolean arg3, int arg4,
						int arg5) {
					setHorizontalAlignment(SwingConstants.CENTER);
					return super.getTableCellRendererComponent(arg0, arg1, arg2, arg3, arg4, arg5);
				}
			});
			table.getColumnModel().getColumn(2).setPreferredWidth(413);
		}
		return table;
	}
	private JTextField getTextClassificacao() {
		if (textClassificacao == null) {
			textClassificacao = new JTextField();
			textClassificacao.setBounds(19, 69, 472, 22);
			textClassificacao.addKeyListener(new KeyAdapter() {
				@Override
				public void keyPressed(KeyEvent arg0) {
					if (arg0.getKeyChar() == KeyEvent.VK_ENTER || arg0.getKeyCode() == 40) 
						getBtnPesquisaClassificacao().requestFocus();
					if (arg0.getKeyCode() == 38)
						getBtnPesquisa().requestFocus();
				}
			});
			textClassificacao.addFocusListener(new FocusAdapter() {
				@Override
				public void focusGained(FocusEvent arg0) {
					getTextClassificacao().selectAll();
				}
				@Override
				public void focusLost(FocusEvent e) {
					atualizaTextClassificacao();
				}
			});
			textClassificacao.setColumns(10);
		}
		return textClassificacao;
	}
	protected void atualizaTextClassificacao() {
		if (getTextClassificacao().getText().trim().length() > 0) {
			try {
				String str[] = getTextClassificacao().getText().trim().replace(".", "").split(" ");
				setClassificacao(getActionClassificacao().findEntityFromForm(str[0]));
				if (getClassificacao() != null) {
					getTextClassificacao().setText(getClassificacao().getClassificacaoMask() +" " +getClassificacao().getDescricao());
				} else {
					getTextClassificacao().setText("");
				}
			} catch (PersistenceExceptionMessage e) {
				e.printStackTrace();
			}
		} else {
			setClassificacao(null);
		}
	}

	private JLabel getLblClassificao() {
		if (lblClassificao == null) {
			lblClassificao = new JLabel("Classifica\u00E7\u00E3o");
			lblClassificao.setBounds(19, 49, 61, 14);
		}
		return lblClassificao;
	}
	private JButton getBtnPesquisaClassificacao() {
		if (btnPesquisaClassificacao == null) {
			btnPesquisaClassificacao = new JButton("");
			btnPesquisaClassificacao.setBounds(497, 68, 24, 24);
			btnPesquisaClassificacao.setPreferredSize(new Dimension(24, 24));
			btnPesquisaClassificacao.setMinimumSize(new Dimension(24, 24));
			btnPesquisaClassificacao.setMaximumSize(new Dimension(24, 24));
			btnPesquisaClassificacao.addKeyListener(new KeyAdapter() {
				@Override
				public void keyPressed(KeyEvent e) {
					if (e.getKeyChar()== KeyEvent.VK_ENTER || e.getKeyCode() == 40)
						getCheckBoxVendaFracionada().requestFocus();
					if (e.getKeyCode() == 38)
						getTextClassificacao().requestFocus();
				}
			});
			btnPesquisaClassificacao.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					ClassificacaoPesquisa cp = new ClassificacaoPesquisa();
					cp.setVisible(true);
					if (cp.getClassificacao() != null) {
						getTextClassificacao().setText(cp.getClassificacao().toString());
						atualizaTextClassificacao();
					}
				}
			});
			btnPesquisaClassificacao.setIcon(new ImageIcon(MoldeProdutoMain.class.getResource("/user/interfaces/icones/Search20.png")));
		}
		return btnPesquisaClassificacao;
	}

	public ClassificacaoActionsManager getActionClassificacao() {
		if (actionClassificacao == null) {
			actionClassificacao = new ClassificacaoActionsManager();
		}
		return actionClassificacao;
	}

	public void setActionClassificacao(ClassificacaoActionsManager actionClassificacao) {
		this.actionClassificacao = actionClassificacao;
	}
	
	public Classificacao getClassificacao() {
		return classificacao;
	}

	public void setClassificacao(Classificacao classificacao) {
		this.classificacao = classificacao;
	}

	public String getStrClassificacao() {
		if (strClassificacao == null) {
			strClassificacao = getTextClassificacao().getText();
		}
		return strClassificacao;
	}

	public void setStrClassificacao(String strClassificacao) {
		this.strClassificacao = strClassificacao;
	}
	private JButton getBtnDuplicar() {
		if (btnDuplicar == null) {
			btnDuplicar = new JButton("Duplicar");
			btnDuplicar.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					MoldeProduto mp = selectObject();
					if (mp != null) {
						final MoldeProdutoCadastro mpc = new MoldeProdutoCadastro();
						mpc.setMoldeProduto(mp);
						mpc.setFormFull();
						mpc.getTextDescricao().setText("");
						mpc.setMoldeProduto(null);
						mpc.getBtnSalvar().addActionListener(new ActionListener() {

							public void actionPerformed(ActionEvent arg0) {
								// TODO Auto-generated method stub
								mpc.dispose();
							}
						});
						mpc.setVisible(true);
						if (mpc.isAddElement() && getTable().getModel().getRowCount() > 0) {
							refreshTable();
						}
					} else {
						Toolkit.getDefaultToolkit().beep();  
						JOptionPane.showMessageDialog(null, "Seleciona um item da tabela.", Mensagem.getValue(Mensagem.TITULO_DIALOGO_ALERTA), JOptionPane.WARNING_MESSAGE);
					}
				}
			});
			btnDuplicar.setIcon(new ImageIcon(MoldeProdutoMain.class.getResource("/user/interfaces/icones/Copy.png")));
			btnDuplicar.setVerticalTextPosition(SwingConstants.BOTTOM);
			btnDuplicar.setPreferredSize(new Dimension(60, 60));
			btnDuplicar.setMinimumSize(new Dimension(60, 60));
			btnDuplicar.setMaximumSize(new Dimension(60, 60));
			btnDuplicar.setHorizontalTextPosition(SwingConstants.CENTER);
		}
		return btnDuplicar;
	}
}
